package Offer65;

/**
 * 不用加减乘除做加法
 * 考察的知识点是位运算
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(new Solution().add(1, 1));
    }
}

/**
 * 使用位运算
 * 需要了解的一个知识点
 * 1. m>>n 表示 m/2^n;
 * 2. m<<n 表示 m*2^n;
 * 3. m^n 表示异或运算，如果m是8，二进制是1000,n是11，二进制是1011,则m^n 二进制是0011（相同为0，不同为1），十进制是3
 */
class Solution {
    public int add(int a, int b) {
        while(b != 0) { // 当进位为 0 时跳出
            int c = a^b;
            b = (a&b)<<1;
            a  = c;
        }
        return a;
    }
}
